/**
 * 
 */
package com.kingcore.director.core.ui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.apache.commons.lang.ArrayUtils;

/**
 * @author Zeven
 *
 */
public class FontChooser extends JDialog implements ItemListener, ActionListener {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	// 提示标签
    JLabel jlFont = new JLabel("字体");

    JLabel jlSize = new JLabel("大小");

    JLabel jlStyle = new JLabel("样式");

    // 选择组合框
    JComboBox jcbFont;

    JComboBox jcbSize;

    JComboBox jcbStyle;

    // 布局面板
    JPanel topPanel = new JPanel();

    JPanel bottomPanel = new JPanel();

    // 当前选择的字体名称
    String choosedFont = null;

    // 当前选择的字体大小
    int choosedSize = 10;

    // 当前选择的字体样式
    int choosedStyle = 0;

    // 当前选择的字体
    Font font = null;

    // 操作按钮
    JButton jb = new JButton("确定");

    // 构造函数
    public FontChooser() {
            // 设置布局管理器
            this.setLayout(new BorderLayout());

            // 读取系统所有字体信息
            GraphicsEnvironment ge = GraphicsEnvironment
                            .getLocalGraphicsEnvironment();
            String[] sysfonts = ge.getAvailableFontFamilyNames();

            // 创建字体名称组合框
            jcbFont = new JComboBox(sysfonts); 
            jcbFont.addItemListener(this);

            // 设置默认选择的字体为第一个系统字体
            choosedFont = sysfonts[0];

            // 设置字体大小数组，从10到82
            String[] fontSizes = new String[10];
            for (int i = 0; i < fontSizes.length; i++)
                    fontSizes[i] = String.valueOf(8 + i * 2);

            // 创建字体大小组合框
            jcbSize = new JComboBox(fontSizes);
            jcbSize.addItemListener(this);

            if (ArrayUtils.contains(sysfonts, "Courier New")){ //add by wzw
            	jcbFont.setSelectedItem("Courier New"); //default font
			}
        	jcbSize.setSelectedItem("16");  //default size is 14.
        	
            // 设置字体样式组合框
            jcbStyle = new JComboBox(new String[] { "PLAIN", "BOLD", "ITALIC",
                            "BOLD & ITALIC" });
            jcbStyle.addItemListener(this);

            // 窗体布局
            topPanel.setLayout(new FlowLayout());
            topPanel.add(jlFont);
            topPanel.add(jcbFont);
            topPanel.add(jlStyle);
            topPanel.add(jcbStyle);
            topPanel.add(jlSize);
            topPanel.add(jcbSize);
            add(topPanel, BorderLayout.CENTER);
            bottomPanel.add(jb);
            add(bottomPanel, BorderLayout.SOUTH);

            // 添加事件监听器
            jb.addActionListener(this);

            // 设置当前窗体为模态窗体，也就是不能在不关闭当前窗体的时候访问当前应用程序的其他窗体
            setModal(true);

            // 设置字体选择窗体的大小和位置
            Toolkit theKit = this.getToolkit();
            Dimension wndSize = theKit.getScreenSize();
            this.setBounds(wndSize.width / 4, wndSize.height / 4,
                            wndSize.width / 2, wndSize.height / 4);

            // 设置可见
            setVisible(true);
    }

    // 响应选择组合框
    public void itemStateChanged(ItemEvent e) {
            // 如果没有选择组合框，则退出
            if (e.getStateChange() != ItemEvent.SELECTED) {
                    return;
            }

            // 取得选择的组合框
            JComboBox list = (JComboBox) e.getSource();

            // 如果是选择字体名称，保存选择的字体名称
            if (list == jcbFont) {
                    choosedFont = (String) jcbFont.getSelectedItem();
            }
            // 如果是选择字体样式，保存选择的字体样式
            else if (list == jcbStyle) {
                    choosedStyle = jcbStyle.getSelectedIndex();
            }
            // 如果是选择字体大小，保存选择的字体大小
            else {
                    String sizeString = (String) jcbSize.getSelectedItem();
                    choosedSize = Integer.parseInt(sizeString);
            }

            // 创建新的字体
            font = new Font(choosedFont, choosedStyle, choosedSize);
    }

    // 字体的读取函数
    public Font getFont() {
            return font;
    }

    // 响应单击按钮
    public void actionPerformed(ActionEvent e) {
            // 退出当前字体选择窗体
            this.dispose();
    }
}